Micron Document
Building a Search Engine - How and Why

By Daedalus • Posted: 2026-01-11 00:54


On my list of things I expected to be doing in 2026, this was certainly not at the top, but here we are. Nomadnet and Reticulum are more than a hobby for me at this point; with the state of the west as it is, the only real method I have for managing anxiety is to work on things that maybe, just maybe can make a difference for somebody.

Before I get into the details, here's the link to my version of a Nomadnet Search Engine: Sunspotter. The branding is probably going to change at some point, but I have more important things to improve, like search accuracy and additional user-friendly features, both for the query-ers and page owners.

Features

Already Implemented:
- Recursive local link crawling
- Avoiding duplicate pages
- Automatic rate-limiting
- ONNX embedding vector generation
- LanceDB page content, metadata, and embedding storage

In Progress:
- Improved sentence parsing and text cleaning
- Reranking on query (currently just vector similarity)
- Query inference improvements

Planned:
- File-diff tracking, maintaining a log of pages with recent changes
- "Wayback Machine"-style recording of early NomadNet, for posterity
- Closed-loop feedback for improving accuracy over time
- Illegal content reporting and blacklisting

Why build a new search engine?
Well, aside from it being fun?? Hmm. Perhaps I'll point to a couple of the existing ones, from which I took some inspiration:

- The Waystone went offline a couple of months ago for me. I'm not sure if they just left the Testnet, but as effective as it was, it is not longer available.
- The Nomad Index has been live for a while, and the accuracy of the search engine is much better than mine at present. However, the page availability has been hit-or-miss for me, and there are some issues in the native NomadNet client with getting the search function itself to work. That being said, it has worked for me, and the performance is excellent.

So I suppose it's fairly obvious why I started the project. Somebody had to.

Risks

There are a number of risks incurred when attempting to build a piece of software that could become a significant piece of infrastructure. I'm not the best software developer in the world, so finding all of the things that can go wrong has taken some time. Here is an incomplete list (please comment if you think of something I may have missed!):

1) Overloading of low-bandwidth node connections
Possibly the most-important characteristic of the crawling service is to avoid bogging down the network in any way. This is surprisingly not that difficult to do, as there are only hundreds of pages on nomadnet at present (Jan 2026).

Still, future-planning is necessary. My current implementation handles this in a relatively naive way; a delay of 10x the page request time rolling average (N=5) is included between all page requests. Intuitively, if the path I was using to query the page was the only interface that node had to the wider net, I would avoid loading that node more than 10% of its total bandwidth. This should allow it to simultaneously serve other users even if the site is currently being indexed.

Another critical piece of the puzzle is the re-indexing period for pages and resources. My current setup just hard-codes a 1 week delay between crawls, but there are ways to make this smarter; I might just not be smart enough to figure them out myself---please let me know if you have an idea for an improvement!

2) Avoiding illegal content
This might not really be an issue for now, but it's something I want to plan ahead for. The risk here is twofold:

- Users don't want to receive suggestions for pages which contain illegal or disturbing content.

- I don't want to store and propagate illegal content, whether it's threats of terrorism or CSAM. This is mostly from a personal morality standpoint.

Solution: Reporting links for offensive/illegal pages, combined with semi-automated LLM-based report validation, finally leading to moderation by yours truly. This functionality isn't added quite yet.

3) Otherwise undesired indexing
I'm hoping to have some level of automatic filtering for certain types of content, but if a node owner does *not* want a certain page (or even their entire domain) to be indexed, they should have the ability to tell my crawler to avoid those pages.

Solution: Provide a directive that page owners can add to the header of a page/domain which is obeyed by the crawler. One example of this would be adding to the existing #!c=300 (cache time) directive.

This might look like the following:
#!c=300,#!i=False
The cache directive should still be respected by the browsers, and the 'i' directive (index) would be respected by my crawler (and other indexing engines that decide to add this feature). This feature isn't *yet* added to my code.

How did I build it?
As a self-ascribed amateur programmer, you might think I asked an LLM to help...how insulting! You'd be right, though, to some degree.

I use a local model (a quant of Qwen3-Next 80B A3B) to assist with Cline inside of Code-OSS (open-source VScode). The mix of hand-written code to generated code is around 50-50, but the initial version of a lot of the tools is purely generated. My reason is simple; I don't really know how a lot of the necessary pieces of a search engine work---or I didn't before starting this project.

I had some experience with generating embeddings and performing reranked queries from my Wiki Bot project, which will be getting its own blog post soon! However, databases were (and are still) a bit of a black box to me. One of my learnings from the Wiki Bot project was that ChromaDB is not to my taste. It has to store the entire database in-memory, which was infeasible with the entirety of English Wikipedia. Additionally, it has some icky opt-out telemetry enabled by default. My firewall caught this, but it's not a good feature.

Anyway, LanceDB is the same backend that AnythingLLM uses for their local RAG embedding generation and querying, and I've had no complains thus far. It's fast, relatively lightweight, and private.

At some point I may make the code open-source, but I'll need to clean it up a bit before that point.

In Conclusion
There are still several serious performance issues which will affect the accuracy of returned results. Additionally, the database is not running on the final machine (yet), as I need to rebuild the ONNX library from source to get it working.

I'm expecting to have the system in a useful state in the next week or two; in the meantime, let me know if you'd like any additional features!

~ Daedalus


Comments (10)

tegdiwt • 2026-01-19 09:48
ambitious!

Daedalus • 2026-01-20 04:46
thanks for reading, tegdiwt! :D i've found the space on reticulum to be very rewarding to develop on. I hope the final product will be of some use to the community.

Meowing1000 • 2026-01-21 02:52
SO zased :3 keep it up! <3

Daedalus • 2026-01-21 03:31
thanks meowing~ learned a new word today <3 zased

Hydro • 2026-03-14 17:10
Love the work you're doing! I'm looking forward to contributing to this space; programmer by trade and see tremendous value in Reticulum. As such, can't help but see the importance of search indexes and hub pages

Daedalus • 2026-03-16 02:32
Thanks for the support, Hydro! There's so much left to do, sometimes you've just got to pick what sounds fun :D I'd be happy to chat, if you want to compare notes or if you run into any issues getting started on your own projects. My lxmf address is on my homepage... or I think I can link it here? message me here

Daedalus • 2026-03-16 02:34
Also, as a minor update, the search quality is still slowly improving. There are oddities in searching via page name of all things. That has improved a bit, but I believe that my cleaning function invalidates some pages that otherwise should be linked---take for instance teapot, which should be easy to search, but doesn't show up except in other related searches. nnI should figure it out eventually. For now I'll just keep the service up and work on it ask I can.

L3PR • 2026-04-13 08:14
So cool to be a part of history for the new web. Keep up the good work!

Daedalus • 2026-04-15 04:18
Thanks L3PR! I sure hope we can stay hopeful about the future. <3

kuvoyavo • 2026-07-27 02:42
Much respect!

Add a Comment
Fields should support markup, but this isn't well-tested! Max length 1024 characters
Your Name:

Your Comment:


Navigation